import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import ElementPlus from 'unplugin-element-plus/vite'
import path from 'path'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue'],
      dts: 'types/auto-imports.d.ts',
      dirs: ['src/hooks'],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
      dts: 'types/components.d.ts',
      dirs: ['src/components'],
    }),
    ElementPlus({}),
  ],
  resolve: {
    // 配置@ 转换为./src
    alias: {
      '@': path.resolve('./src'), // 相对路径别名配置，使用 @ 代替 src
    },
    extensions: ['.ts', '.vue', '.js', '.jsx', '.tsx'], // 导入时想要省略的扩展名列表。
  },
  server: {
    port: 8086,
    open: true,
    host: '0.0.0.0',
  },
  build: {
    // 禁用 gzip 压缩大小报告，可略微减少打包时间
    reportCompressedSize: false,
    /** 消除打包大小超过 500kb 警告 */
    chunkSizeWarningLimit: 2000,
    /** 在打包代码时移除 console.log、debugger 和 注释 */
    rollupOptions: {
      // 静态资源分类打包
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
        manualChunks(id) {
          // 对于其他模块，可以根据需要进行进一步的分组或让 Rollup 自行决定
          if (id.includes('node_modules')) {
            //@ts-ignore
            let regex = /\/node_modules\/(?!.npm)(?<moduleName>[^\/]*)\//
            return id.toString().match(regex)?.groups!.moduleName ?? 'vender'
          }
        },
      },
    },
  },
})
